﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Librerias;
//las que añado
using System.Data;

namespace eCampusWeb
{
    public partial class AgendaCrear : System.Web.UI.Page
    {
        ENEventoAlumno androide;

        #region Page_Load
        /// <summary>
        /// Cargará la página 
        /// </summary>
        /// <param name="sender">Página AgendaCrear</param>
        /// <param name="e">Evento Load</param>
        protected void Page_Load(object sender, EventArgs e)
        {
             if (!IsPostBack)
            {
                ///instancio un androide que me haga el trabajo
                androide = new ENEventoAlumno();

                ///Veo a ver quien accede a la página
                int quienEs;

                if (Session["tipo"] != null)
                {
                    quienEs = Convert.ToInt32(Session["tipo"]);
                    cargaDatos(quienEs);
                }
                else
                {
                    ///Cargo los datos en consecuencia
                    cargaDatos(-1);
                }
            }
            else
            {
                
            }

        }
        #endregion

        #region cargaDatos(int visitante)
        /// <summary>
        /// Rellenará todo según el visitante que tengamos
        /// </summary>
        /// <param name="visitante"></param>
        private void cargaDatos(int visitante)
        {
            DataTable DatosFrescos;
            string quienEs;


            ///miro que he de cargar
            switch (visitante)
            {
                ///INVITADO
                case -1:
                    lbAgendaCrear.Visible = false;
                    lbAvisoArribaProfesor.Visible = false;
                    lbAvisoArribaInvitado.Visible = true;
                    lbAvisoArribaInvitado.Text = "¡Oppss! Debe registrarse para acceder a crear eventos";
                    lbFecha.Visible = false;
                    DatFecha.Visible = false;
                    lbHoraIni.Visible = false;
                    listaHoras1.Visible = false;
                    lbHoraFinal.Visible = false;
                    listaHoras2.Visible = false;
                    lbTituloEvento.Visible = false;
                    tbTituloEvento.Visible = false;
                    tbContenido.Visible = false;
                    lbContenido.Visible = false;
                    btNuevoEvento.Visible = false;
                    LbError.Visible = false;
                    break;

                /// Profesor
                case 1: //No puede crear eventos
                    lbAgendaCrear.Visible = false;
                    lbAvisoArribaInvitado.Visible = false;
                    lbAvisoArribaProfesor.Visible = true;
                    lbAvisoArribaProfesor.Text = "No tienes acceso a eventos personales, accede desde la aplicación windows";
                    lbFecha.Visible = false;
                    DatFecha.Visible = false;
                    lbHoraIni.Visible = false;
                    listaHoras1.Visible = false;
                    lbHoraFinal.Visible = false;
                    listaHoras2.Visible = false;
                    lbTituloEvento.Visible = false;
                    tbTituloEvento.Visible = false;
                    tbContenido.Visible = false;
                    lbContenido.Visible = false;
                    btNuevoEvento.Visible = false;
                    LbError.Visible = false;
                    break;

                ///Alumno
                case 2: ///Me cargará lo eventos del dia
                    lbAvisoArribaInvitado.Visible = false;
                    lbAvisoArribaProfesor.Visible = false;
                    lbAgendaCrear.Visible = true;
                    lbFecha.Visible = true;
                    DatFecha.Visible = true;
                    lbHoraIni.Visible = true;
                    listaHoras1.Visible = true;
                    lbHoraFinal.Visible = true;
                    listaHoras2.Visible = true;
                    lbTituloEvento.Visible = true;
                    tbTituloEvento.Visible = true;
                    tbContenido.Visible = true;
                    lbContenido.Visible = true;
                    btNuevoEvento.Visible = true;
                    LbError.Visible = false;
                    break;


                ///OTRO
                default:
                    lbAvisoArribaProfesor.Visible = false;
                    lbAvisoArribaInvitado.Visible = true;
                    lbAvisoArribaInvitado.Text = "¡Oppss! Debe registrarse para acceder a crear eventos";
                    lbFecha.Visible = false;
                    DatFecha.Visible = false;
                    lbHoraIni.Visible = false;
                    listaHoras1.Visible = false;
                    lbHoraFinal.Visible = false;
                    listaHoras2.Visible = false;
                    lbTituloEvento.Visible = false;
                    tbContenido.Visible = false;
                    lbContenido.Visible = false;
                    btNuevoEvento.Visible = false;
                    LbError.Visible = false;
                    break;

            }
        }
        #endregion

        /// <summary>
        /// A partir de un combo box, comprueba su hora y si es correcta la añade a horaAModificar
        /// </summary>
        /// <param name="combo">ComboBox del que se va a capturar la hora</param>
        /// <param name="horaAModificar">DateTime donde se va a introducir la hora capturada del ComboBox. No modificia día, mes ni año.</param>
        /// <param name="queEs">Puede ser "inicial" o "final". Se usa en: "Error, el formato de la hora "+queEs+" no es válido"</param>
        /// <returns></returns>
        private bool ExtraeHoras(string entrada, ref DateTime horaAModificar)
        {
            int i, horas, minutos;
            string aux;

            //Coge la cadena con formato "HH:MM"
            string cadenaEntrada = entrada.Trim();

            //Compreba que tiene el separador
            if (cadenaEntrada.Contains(":"))
            {
                //Extrae las horas
                aux = "";
                for (i = 0; i < cadenaEntrada.Length && cadenaEntrada[i] != ':'; i++)
                {
                    aux += cadenaEntrada[i];
                }
                i++;
                try
                {
                    horas = int.Parse(aux);
                }
                catch (Exception)
                {           
                    return false;
                }

                //Comprueba rango
                if (horas < 0 || horas > 23)
                {
                    return false;
                }


                //Extrae minutos
                aux = "";
                for (; i < cadenaEntrada.Length && cadenaEntrada[i] != ':'; i++)
                {
                    aux += cadenaEntrada[i];
                }

                try
                {
                    minutos = int.Parse(aux);
                }
                catch (Exception)
                {

                    return false;
                }

                //Compruebo rango
                if (minutos < 0 || minutos > 60)
                {
                    return false;
                }

                horaAModificar = new DateTime(horaAModificar.Year, horaAModificar.Month, horaAModificar.Day, horas, minutos, 0);
            }
            else
            {
                return false;
            }

            return true;
        }

        /// <summary>
        /// A partir de los combobox, introduce en los TimePiker la hora, comprobando los rangos y formatos.
        /// </summary>
        /// <returns>true si todo va bien</returns>
        private bool AdaptaHora(ref DateTime fecha,ref  DateTime fecha2)
        {
            //Si la fuarde en "fecha"
            if (ExtraeHoras(listaHoras1.Text, ref fecha))
            {
                //La introducimos de nuevo en el TimePicker
              //  DatFecha.SelectedDate = fecha;
         
                if (ExtraeHoras(listaHoras2.Text, ref fecha2))
                {
                   // DatFecha.SelectedDate = fecha2;


                    //Comprueba que la fecha final sea mayor que la inicial
                    if (fecha2 >= fecha) 
                        return true;
                    else
                    {
                        LbError.Visible = true;
                        LbError.Text = "Las horas introducidas no son correctas. La fecha final es anterior a la inicial";
                    }
                }
            }

            return false;
        }

        protected void btNuevoEvento_Click1(object sender, EventArgs e)
        {
            string quienEs;
            quienEs = Session["correo"].ToString();


            //Captura el valor del TimePicker de fecha inicial en "fecha"
            DateTime fecha = new DateTime(DatFecha.SelectedDate.Year, DatFecha.SelectedDate.Month, DatFecha.SelectedDate.Day);
            //Ahora lo mismo con fecha final.
            DateTime fecha2 = new DateTime(DatFecha.SelectedDate.Year, DatFecha.SelectedDate.Month, DatFecha.SelectedDate.Day);
                
            try
            {
                if (AdaptaHora(ref fecha,ref fecha2))
                {
                    (new ENEventoAlumno(DatFecha.SelectedDate, quienEs, tbTituloEvento.Text, tbContenido.Text, fecha, fecha2)).Alta();
                    Response.Redirect("~/Agenda.aspx");
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.ToString().Contains("usuCorreo"))
                {

                }
            }
        }
    }
}
